#pragma once

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>

typedef int TYPE;
//双向带头循环链表
typedef struct DListNode
{
	TYPE val;
	struct DListNode* prev;
	struct DListNode* next;
}ListNode;


extern ListNode* BuyDListNode(TYPE x);//节点的创建
extern ListNode* ListCreate();//头节点的创建
extern void ListPushBack(ListNode* plist, TYPE x);//尾插
extern void ListPopBack(ListNode* plist);//尾删
extern void ListPopHead(ListNode* plist);//头删
extern void ListPushHead(ListNode* plist, TYPE x);//头插
extern void ListPushFront(ListNode* pos, TYPE x);//任意位置插入（前插）
extern void ListPop(ListNode* pos);//任意位置删除
extern int ListEmpty(ListNode* plist);//检验是否为空
extern ListNode* ListFind(ListNode* plist, TYPE x);//查找
extern void ListDestory(ListNode** plist);//销毁（需要二级指针）


